//ver Example 4-3. A session connection servlet
package br.edu.ifrs.poa.dao;

import br.edu.ifrs.poa.util.PropertiesManager;
import java.io.IOException;
import java.sql.*;
import java.util.*;
import br.edu.ifrs.poa.database.*;
import br.edu.ifrs.poa.model.Usuario;

public class UsuarioDAO {

    private static HashMap dados;

    static {
        try {
            dados = new PropertiesManager("sql.properties").readPropertiesFile();
        } catch (IOException ioe) {
            System.out.println(ioe);
        }
    }
    public final static int ID = 1;
    public final static int NOME = 2;
    public final static int LOGIN = 3;
    public final static int PASSWORD = 4;
    public final static int DATA = 5;

    public static void addUsuario(Usuario usuario) throws SQLException, ClassNotFoundException, IOException {
        Connection conexao = DBConnection.getInstance();
        String sql = loadSQL("Insert.Usuario");
        System.out.println("SQL insert = " + sql);
        PreparedStatement pstmt = conexao.prepareStatement(sql);
        pstmt.setString(1, usuario.getNome());
        pstmt.setString(2, usuario.getLogin());
        pstmt.setString(3, usuario.getSenha());
        pstmt.setDate(4, new java.sql.Date(usuario.getDataCriacao().getTime()));

        int rs = pstmt.executeUpdate();
        pstmt.close();
    }

    public static Usuario getUsuarioByLogin(String login) throws SQLException, ClassNotFoundException, IOException {
        Connection conexao = DBConnection.getInstance();
        Usuario usuario = null;
        String sql = loadSQL("SelectByLogin.Usuario");
        PreparedStatement pstmt = conexao.prepareStatement(sql);
        pstmt.setString(1, login);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            usuario = new Usuario();
            usuario.setId(rs.getInt(ID));
            usuario.setNome(rs.getString(NOME));
            usuario.setLogin(rs.getString(LOGIN));
            usuario.setSenha(rs.getString(PASSWORD));
            usuario.setDataCriacao(rs.getDate(DATA));
        }
        pstmt.close();
        return usuario;

    }

    public static Usuario getUsuarioById(int id) throws SQLException, ClassNotFoundException, IOException {

        Usuario usuario = null;
        Connection conexao = DBConnection.getInstance();
        String sql = loadSQL("SelectById.Usuario");
        PreparedStatement pstmt = conexao.prepareStatement(sql);
        pstmt.setInt(1, id);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            usuario = new Usuario();
            usuario.setId(rs.getInt(ID));
            usuario.setNome(rs.getString(NOME));
            usuario.setLogin(rs.getString(LOGIN));
            usuario.setSenha(rs.getString(PASSWORD));
            usuario.setDataCriacao(rs.getDate(DATA));
        }
        pstmt.close();
        return usuario;
    }

    private static String loadSQL(String key) {
        String sql = null;
        sql = (String) dados.get(key);
        return sql;
    }

    public static void main(String[] args) throws Exception {
//        Usuario user = new Usuario();
//        user.setNome("Pedro");
//        user.setLogin("pp");
//        user.setSenha("9999");
//        user.setDataCriacao(new java.util.Date());

        try {
            //addUsuario(user);
            Usuario usuario = getUsuarioById(81);
            System.out.println(usuario);
        } catch (SQLException ex) {
            System.out.println("Falhou" + ex);
        } catch (ClassNotFoundException ex) {
            System.out.println("Falhou" + ex);
        } catch (IOException ex) {
            System.out.println("Falhou" + ex);
        }
    }
}
